package cn.good.myrule;

import com.netflix.loadbalancer.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 自定义 Ribbon - 负载均衡的策略
 *
 * @author shengren.yan
 * @create 2023-12-24
 */
@Configuration
public class MySelfRule {

    // 默认是轮询
    // 算法：rest接口第几次请求数 % 服务器集群总数量 = 实际调用服务器位置下标 ，每次服务重启动后rest接口计数从1开始

    @Bean
    public IRule myRule() {
        // 定义为随机
         return new RandomRule();
        // 先按照轮询，如果获取服务失败，再获取可用服务
        // return new RetryRule();
        // 轮询
        // return new RoundRobinRule();
        // 响应速度越快，权重越大，越容易被选择
        // return new WeightedResponseTimeRule();
        // 先过滤多次访访问故障的服务，选择一个并发量小的服务
        // return new BestAvailableRule();
        // 先过滤故障服务，选择并发量小的服务
        // return new AvailabilityFilteringRule();
        // 复合判断，所在区域性能，可用性选择服务
//        return new ZoneAvoidanceRule();
    }

}
